/**
 * HTTP请求工具模块
 * 提供统一的API请求封装和错误处理
 */

import axios from 'axios'

// 创建axios实例
const http = axios.create({
  baseURL: '/api',
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  },
  withCredentials: true
})

// 请求拦截器
http.interceptors.request.use(
  (config) => {
    // 可以在这里添加token等认证信息
    return config
  },
  (error) => {
    console.error('Request error:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
http.interceptors.response.use(
  (response) => {
    return response.data
  },
  (error) => {
    console.error('Response error:', error)
    
    if (error.response) {
      // 服务器返回错误状态码
      const { status, data } = error.response
      console.error(`HTTP ${status}:`, data)
    } else if (error.request) {
      // 请求发出但没有收到响应
      console.error('Network error:', error.message)
    } else {
      // 其他错误
      console.error('Error:', error.message)
    }
    
    return Promise.reject(error)
  }
)

/**
 * 豆瓣电影数据接口
 */
export interface Movie {
  id: string
  title: string
  original_title: string
  rating: number
  year: string
  images: {
    small: string
    medium: string
    large: string
  }
  genres: string[]
  directors: string[]
  casts: string[]
  summary: string
}

/**
 * 获取热门电影列表
 * @param category 电影分类（热门、最新、经典等）
 * @param type 类型（全部、电影、电视剧等）
 * @param limit 返回数量限制
 * @param start 起始位置
 * @returns 电影列表数据
 */
export const getHotMovies = async (
  category: string = '热门',
  type: string = '全部',
  limit: number = 20,
  start: number = 0
) => {
  try {
    const response = await http.get('/douban/categories', {
      params: {
        kind: 'movie',
        category,
        type,
        limit,
        start
      }
    })
    return response
  } catch (error) {
    console.error('Failed to fetch hot movies:', error)
    throw error
  }
}

/**
 * 搜索电影
 * @param query 搜索关键词
 * @param limit 返回数量限制
 * @param start 起始位置
 * @returns 搜索结果
 */
export const searchMovies = async (
  query: string,
  limit: number = 20,
  start: number = 0
) => {
  try {
    const response = await http.get('/douban/search', {
      params: {
        q: query,
        limit,
        start
      }
    })
    return response
  } catch (error) {
    console.error('Failed to search movies:', error)
    throw error
  }
}

/**
 * 获取热门剧集列表
 * @param category 剧集分类（热门、最新、经典等）
 * @param type 类型（全部、电视剧、综艺等）
 * @param limit 返回数量限制
 * @param start 起始位置
 * @returns 剧集列表数据
 */
export const getHotTVShows = async (
  category: string = '热门',
  type: string = '全部',
  limit: number = 20,
  start: number = 0
) => {
  try {
    const response = await http.get('/douban/categories', {
      params: {
        kind: 'tv',
        category,
        type,
        limit,
        start
      }
    })
    return response
  } catch (error) {
    console.error('Failed to fetch hot TV shows:', error)
    throw error
  }
}

/**
 * 获取热门综艺列表
 * @param category 综艺分类（热门、最新、经典等）
 * @param type 类型（全部、综艺等）
 * @param limit 返回数量限制
 * @param start 起始位置
 * @returns 综艺列表数据
 */
export const getHotVarietyShows = async (
  category: string = '热门',
  type: string = '全部',
  limit: number = 20,
  start: number = 0
) => {
  try {
    const response = await http.get('/douban/categories', {
      params: {
        kind: 'tv',
        category,
        type,
        limit,
        start
      }
    })
    return response
  } catch (error) {
    console.error('Failed to fetch hot variety shows:', error)
    throw error
  }
}

export default http